home *** CD-ROM | disk | FTP | other *** search
-
-
-
- IIIIPPPPCCCC::::::::OOOOppppeeeennnn2222((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) IIIIPPPPCCCC::::::::OOOOppppeeeennnn2222((((3333))))
-
-
-
- NNNNAAAAMMMMEEEE
- IPC::Open2, open2 - open a process for both reading and
- writing
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- use IPC::Open2;
- $pid = open2(\*RDR, \*WTR, 'some cmd and args');
- # or
- $pid = open2(\*RDR, \*WTR, 'some', 'cmd', 'and', 'args');
-
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The _o_p_e_n_2() function spawns the given $cmd and connects $rdr
- for reading and $wtr for writing. It's what you think
- should work when you try
-
- open(HANDLE, "|cmd args|");
-
- The write filehandle will have autoflush turned on.
-
- If $rdr is a string (that is, a bareword filehandle rather
- than a glob or a reference) and it begins with ">&", then
- the child will send output directly to that file handle. If
- $wtr is a string that begins with "<&", then WTR will be
- closed in the parent, and the child will read from it
- directly. In both cases, there will be a _d_u_p(2) instead of
- a _p_i_p_e(2) made.
-
- _o_p_e_n_2() returns the process ID of the child process. It
- doesn't return on failure: it just raises an exception
- matching /^open2:/.
-
- WWWWAAAARRRRNNNNIIIINNNNGGGG
- It will not create these file handles for you. You have to
- do this yourself. So don't pass it empty variables
- expecting them to get filled in for you.
-
- Additionally, this is very dangerous as you may block
- forever. It assumes it's going to talk to something like
- bbbbcccc, both writing to it and reading from it. This is
- presumably safe because you "know" that commands like bbbbcccc
- will read a line at a time and output a line at a time.
- Programs like ssssoooorrrrtttt that read their entire input stream
- first, however, are quite apt to cause deadlock.
-
- The big problem with this approach is that if you don't have
- control over source code being run in the child process, you
- can't control what it does with pipe buffering. Thus you
- can't just open a pipe to cat -v and continually read and
- write a line from it.
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
-
-
-
- PPPPaaaaggggeeee 1111 ((((pppprrrriiiinnnntttteeeedddd 11110000////22223333////99998888))))
-
-
-
-
-
-
- IIIIPPPPCCCC::::::::OOOOppppeeeennnn2222((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) IIIIPPPPCCCC::::::::OOOOppppeeeennnn2222((((3333))))
-
-
-
- See the _I_P_C::_O_p_e_n_3 manpage for an alternative that handles
- STDERR as well. This function is really just a wrapper
- around _o_p_e_n_3().
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 2 (printed 10/23/98)
-
-
-
-